This is Kara’s first pass at looking at the Sleep data (with data from 2019-01-24). (Note: PDF printed portrait, 80% zoom, default margins.)

Demographics

A couple of things to note here: A substantial majority of participants in Thailand were female, and this also appears to be true in China and Vanuatu (where an unusual number of participants are missing gender/sex info).

Questions 1-23

1. Where do you usually sleep at night? (slep_ordn01)

2. What do you usually sleep on at night? (slep_ordn02)

3. Does anyone else sleep in the same bed (or mat, hammock, etc.) with you? (slep_ordn03)

4. If yes, who sleeps with you in the bed? Please circle the person(s) from the list (slep_ordn04)

5. Besides anyone who shares the bed with you, does someone else sleep in the same room with you? (slep_ordn05)

6. If yes, who else sleeps in the same room with you? Please circle the person(s) from the list (slep_ordn06)

7. What does your family use to see at night? (slep_ordn07)

8. Do you usually take naps? (slep_ordn08)

9. If so, how often do you rest or nap? (slep_ordn09)

10. When do you typically fall asleep every night and wake up every night? (slep_ordn10)

11. Does that vary a lot from night to night? (slep_ordn11)

12a. RA judgment for hours slept (slep_ordn12a, derived from slep_ordn12)

13. What do you think is the most important role of sleep for you? (slep_ordn13)

14. Do you look forward to dreaming? (slep_ordn14)

15. Are dreams an important source of spiritual insight for you? (slep_ordn15)

16. Do you regard sleep as a doorway into another way of being? (slep_ordn16)

17. Do special spiritual things happen during the night for you? (slep_ordn17)

18. Do you wake up to pray in the middle of the night? (slep_ordn18)

19a. RA judgment for time spent in prayer (slep_ordn19a, derived from slep_ordn19)

20. If you do, do you go back to sleep? (slep_ordn20)

21. Do you intentionally sleep in any specific positions that have spiritual or health consequences? (slep_ordn21)

22. Do you interact with God or with spirits in the middle of the night? (slep_ordn22)

23. What wakes you up most at night? (slep_ordn23)

“Edge” survey

Total score (slep_edge_total)

Individual questions

The “edge” survey consisted of 20 questions, labeled as follows (order may have varied across versions?):

  • slep_edge01: 11. I’ve felt an evil presence in the room, but could not see, hear, touch or smell anyone there.
  • slep_edge02: 12. I’ve heard someone calling my name
  • slep_edge03: 13. I’ve seen a blurry human figure in the room.
  • slep_edge04: 14.I’ve had the sense of an invisible presence watching me.
  • slep_edge05: 15. I’ve heard the voice of a person I could not identify.
  • slep_edge06: 16. I’ve heard human speech which spoke in a garbled, unclear way.
  • slep_edge07: 17. I’ve seen the image of a face.
  • slep_edge08: 18. I’ve heard the voice of someone familiar to me.
  • slep_edge09: 19. I’ve see things or figures floating in my room.
  • slep_edge10: 20. I’ve felt the presence of an intruder in my bedroom, though I did not actually see, hear, touch or smell anyone
  • slep_edge11: 1. I’ve clearly seen people in my room
  • slep_edge12: 2. I’ve heard non-speech sound, such as laughter, music or other noises
  • slep_edge13: 3. I’ve seen things in my room other than people
  • slep_edge14: 4. I’ve had the feeling of a presence in the room which I felt was aware of me too, but I could not actually see, hear, touch or smell them
  • slep_edge15: 5. I’ve heard God (or a spirit) speak
  • slep_edge16: 6. I’ve heard God (or a spirit) singing to me.
  • slep_edge17: 7. I’ve seen an angel (or a spirit)
  • slep_edge18: 8. I’ve seen a ghost
  • slep_edge19: 9. I’ve felt the presence of God (or a spirit)
  • slep_edge20: 10. I have woken up and been unable to move.

Note: this version of the plot is probably better for slides, but I’ve replotted it on the following page for easy of reading in this PDF.

attributes are not identical across measure variables;
they will be dropped

LS0tCnRpdGxlOiAiU2xlZXAgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wMS0yNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBTbGVlcCBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAxLTI0KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgZGVmYXVsdCBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KZF9yYXcgPC0gcmVhZF9jc3YoIi4uL0NPTVBMRVRFX3VzZSBmb3IgYW5hbHlzaXNfU2xlZXBfSmFuLjI0LjIwMTkuY3N2IikKYGBgCgpgYGB7cn0KZDAgPC0gZF9yYXcgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc2xlcF9vcmRuMTEsIHNsZXBfb3JkbjEyYSwgc2xlcF9vcmRuMTlhLCBzbGVwX2VkZ2VfdG90YWwsIAogICAgICAgICAgICAgICAgIHNsZXBfZGVtb19hZ2UsIHNsZXBfZGVtb19zZXMsIHNsZXBfZGVtb19ob3dyKSwgCiAgICAgICAgICAgIGZ1bnMoYXMubnVtZXJpYykpICU+JQogIG11dGF0ZV9hdCh2YXJzKHNsZXBfb3JkbjAzLCBzbGVwX29yZG4wNSwgc2xlcF9vcmRuMDgsIHNsZXBfb3JkbjE2KSwKICAgICAgICAgICAgZnVucyhyZWNvZGVfZmFjdG9yKC4sICIwIiA9ICJubyIsICIxIiA9ICJ5ZXMiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHNsZXBfb3JkbjA0LCBzbGVwX29yZG4wNiksCiAgICAgICAgICAgIGZ1bnMocmVjb2RlX2ZhY3RvciguLCAiMCIgPSAibm9ib2R5IiwgIjEiID0gInNwb3VzZSIsICIyIiA9ICJzaXN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJicm90aGVyIiwgIjQiID0gImRhdWdodGVyIiwgIjUiID0gInNvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNiIgPSAibW90aGVyIiwgIjciID0gImZhdGhlciIsICI4IiA9ICJncmFuZHBhcmVudCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiID0gImdyYW5kY2hpbGQiLCAiMTAiID0gIm90aGVyIHJlbGF0aXZlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTEiID0gIm5vbi1yZWxhdGl2ZSIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc2xlcF9vcmRuMTFfd29ybGRvZnNwaXJpdHMsIHNsZXBfb3JkbjEzX2RlZXBzZWxmLAogICAgICAgICAgICAgICAgIHNsZXBfb3JkbjEzX21pbmRvZmYsIHNsZXBfb3JkbjEzX3JlcGxlbmlzaCwKICAgICAgICAgICAgICAgICBzbGVwX29yZG4yM19QaHlzaW9sb2dpY2FsLCBzbGVwX29yZG4yM19Qc3ljaG9sb2dpY2FsLAogICAgICAgICAgICAgICAgIHNsZXBfb3JkbjIzX0RyZWFtcywgc2xlcF9vcmRuMjNfU291bmQsCiAgICAgICAgICAgICAgICAgc2xlcF9vcmRuMjNfc3VwZXJuYXR1cmFscHJheWVyKSwKICAgICAgICAgICAgZnVucyhmYWN0b3IoLiwKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiXFwuIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibm8iLCAieWVzIikpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc2xlcF9vcmRuMTUsIHNsZXBfb3JkbjE3LCBzbGVwX29yZG4xOCwgc2xlcF9vcmRuMjA6c2xlcF9vcmRuMjIpLAogICAgICAgICAgICBmdW5zKHJlY29kZV9mYWN0b3IoLiwgIjAiID0gIm5ldmVyIiwgIjEiID0gInJhcmVseSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWV0aW1lcyIsICIzIiA9ICJvZnRlbiIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInNsZXBfZWRnZSIpLCAtc2xlcF9lZGdlX3RvdGFsKSwKICAgICAgICAgICAgZnVucyhyZWNvZGVfZmFjdG9yKC4sICIwIiA9ICJuZXZlciIsICIxIiA9ICJyYXJlbHkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJvY2Nhc2lvbmFsbHkiLCAiMyIgPSAiZnJlcXVlbnRseSIpKSkgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjAxID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib3duIGJlZHJvb20iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJiZWRyb29tIHNoYXJlZCB3aXRoIG90aGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiY29tbW9uIHJvb20gKGxpdmluZyBwbHVzIHNsZWVwaW5nKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAicG9yY2gvb3V0c2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAibm90IGluIGhvbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiID0gInZhcmlhYmxlIiksCiAgICAgICAgIHNsZXBfb3JkbjAyID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJiZWQiLCAiMiIgPSAic29mYSwgZGl2YW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJtYXQsIGdyb3VuZCIsICI0IiA9ICJoYW1tb2NrIiksCiAgICAgICAgIHNsZXBfb3JkbjA3ID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJub3RoaW5nLCBqdXN0IHRoZSBtb29uIGFuZCBzdGFycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAibGlnaHQgZnJvbSB0aGUgY29va2luZyBmaXJlIG9yIGhlYXJ0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiY2FuZGxlcyBvciBzdHJhdyB0b3JjaGVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAib2lsIG9yIGtlcm9zZW5lIGxhbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gImJhdHRlcnktZHJpdmVuIGxhbXAgb3IgZmxhc2hsaWdodCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gImVsZWN0cmljIGxpZ2h0IiksCiAgICAgICAgIHNsZXBfb3JkbjA5ID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJOQSAobmV2ZXIpIiwgIjEiID0gInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAic29tZXRpbWVzICgxLTIgdGltZXMgYSB3ZWVrKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gInVzdWFsbHkgYnV0IG5vdCBldmVyeWRheSAoMy02IHRpbWVzIGEgd2VlaykiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJldmVyeSBkYXkiKSwKICAgICAgICAgc2xlcF9vcmRuMTQgPSByZWNvZGVfZmFjdG9yKHNsZXBfb3JkbjE0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5vIiwgIjEiID0gImEgbGl0dGxlIiwgIjIiID0gImEgbG90IiksCiAgICAgICAgIHNsZXBfY3RyeSA9IHJlY29kZV9mYWN0b3Ioc2xlcF9jdHJ5LCAiMSIgPSAiVVMiLCAiNCIgPSAiR2hhbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiVGhhaWxhbmQiLCAiMiIgPSAiQ2hpbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiVmFudWF0dSIpLAogICAgICAgICBzbGVwX2RlbW9fc2V4ID0gcmVjb2RlX2ZhY3RvcihzbGVwX2RlbW9fc2V4LCAiMSIgPSAibSIsICIyIiA9ICJmIiksCiAgICAgICAgIHNsZXBfZGVtb191YnJ1ID0gcmVjb2RlX2ZhY3RvcihzbGVwX2RlbW9fdWJydSwgIjEiID0gInVyYmFuIiwgIjIiID0gInJ1cmFsIiksCiAgICAgICAgIHNsZXBfZGVtb19hZmZyID0gcmVjb2RlX2ZhY3RvcihzbGVwX2RlbW9fYWZmciwgIjEiID0gIm5vIiwgIjAiID0gInllcyIpLAogICAgICAgICBzbGVwX2RlbW9fdHVuZyA9IHJlY29kZV9mYWN0b3Ioc2xlcF9kZW1vX3R1bmcsICIwIiA9ICJubyIsICIxIiA9ICJ5ZXMiKSkgJT4lCiAgc2VsZWN0KC1jKHNsZXBfZW50cjpzbGVwX2JhdGMsIHNsZXBfZmlsZTpzbGVwX3dob2MpKSAlPiUKICBkaXN0aW5jdCgpCmBgYAoKYGBge3J9CiMgZGVhbCB3aXRoIHNsZWVwaW5nICYgd2FraW5nIHRpbWVzCiMgbm90IHF1aXRlIHBlcmZlY3QhIQpkMSA8LSBkMCAlPiUKICBtdXRhdGVfYXQodmFycyhgc2xlcF9vcmRuMTBhIzFfMV8xYCwgYHNsZXBfb3JkbjEwYSMxXzJfMWApLAogICAgICAgICAgICBmdW5zKGdzdWIoIl4wXFw6IiwgIjEyXFw6IiwgLikpKSAlPiUKICBtdXRhdGUoc2xlcF9kYXRlc2xlZXAgPSBpZmVsc2UoYHNsZXBfb3JkbjEwYSMyXzFgID09ICJQTSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIodG9kYXkoKSksIGFzLmNoYXJhY3Rlcih0b2RheSgpICsgMSkpLAogICAgICAgICBzbGVwX2RhdGV3YWtlID0gYXMuY2hhcmFjdGVyKHRvZGF5KCkgKyAxKSwKICAgICAgICAgc2xlcF9kYXRldGltZXNsZWVwID0gcGFzdGUoc2xlcF9kYXRlc2xlZXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgc2xlcF9vcmRuMTBhIzFfMV8xYCwgYHNsZXBfb3JkbjEwYSMyXzFgKSwKICAgICAgICAgc2xlcF9kYXRldGltZXdha2UgPSBwYXN0ZShzbGVwX2RhdGV3YWtlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBzbGVwX29yZG4xMGEjMV8yXzFgLCBgc2xlcF9vcmRuMTBhIzJfMmApKSAlPiUKICBtdXRhdGVfYXQodmFycyhzbGVwX2RhdGV0aW1lc2xlZXAsIHNsZXBfZGF0ZXRpbWV3YWtlKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoZ3JlcGwoIk1EIiwgLiksIE5BLCAuKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHNsZXBfZGF0ZXRpbWVzbGVlcCwgc2xlcF9kYXRldGltZXdha2UpLAogICAgICAgICAgICBmdW5zKHBhcnNlX2RhdGV0aW1lKC4sIGZvcm1hdCA9ICIlWS0lbS0lZCAlSTolTSAlcCIpKSkgJT4lCiAgbXV0YXRlKHNsZXBfaW50ZXJ2YWwgPSBpbnRlcnZhbChzbGVwX2RhdGV0aW1lc2xlZXAsIHNsZXBfZGF0ZXRpbWV3YWtlKSwKICAgICAgICAgc2xlcF9kdXJhdGlvbiA9IGFzLmR1cmF0aW9uKHNsZXBfaW50ZXJ2YWwpLAogICAgICAgICBzbGVwX2R1cmF0aW9uX251bSA9IGFzLm51bWVyaWMoc2xlcF9kdXJhdGlvbiwgImhvdXJzIikpCmBgYAoKYGBge3J9CmQgPC0gZDEKYGBgCgpgYGB7cn0KIyBjaGVjayBjb3VudHJ5IGNvZGVzCmQgJT4lIAogIGRpc3RpbmN0KHNsZXBfY3RyeSwgc2xlcF9zdWJqKSAlPiUKICBtdXRhdGUoc2xlcF9zdWJqX2ZpcnN0ZGlnID0gc3Vic3RyKHNsZXBfc3ViaiwgMSwgMSkpICU+JQogIGNvdW50KHNsZXBfY3RyeSwgc2xlcF9zdWJqX2ZpcnN0ZGlnKQpgYGAKCgoKIyBEZW1vZ3JhcGhpY3MKCmBgYHtyLCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX2N0cnksIHNsZXBfc3ViaikgJT4lCiAgY291bnQoc2xlcF9jdHJ5KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX2N0cnksIHNsZXBfc3Viaiwgc2xlcF9kZW1vX3NleCkgJT4lCiAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICBjb3VudChzbGVwX2RlbW9fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHNsZXBfZGVtb19zZXgsIHByb3ApCmBgYAoKQSBjb3VwbGUgb2YgdGhpbmdzIHRvIG5vdGUgaGVyZTogQSBzdWJzdGFudGlhbCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVGhhaWxhbmQgd2VyZSBmZW1hbGUsIGFuZCB0aGlzIGFsc28gYXBwZWFycyB0byBiZSB0cnVlIGluIENoaW5hIGFuZCBWYW51YXR1ICh3aGVyZSBhbiB1bnVzdWFsIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgYXJlIG1pc3NpbmcgZ2VuZGVyL3NleCBpbmZvKS4KCmBgYHtyLCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZGlzdGluY3Qoc2xlcF9jdHJ5LCBzbGVwX3N1YmosIHNsZXBfZGVtb19hZ2UpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzbGVwX2RlbW9fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtZWFuID0gbWVhbihzbGVwX2RlbW9fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzZCA9IHNkKHNsZXBfZGVtb19hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1pbiA9IG1pbihzbGVwX2RlbW9fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtYXggPSBtYXgoc2xlcF9kZW1vX2FnZSwgbmEucm0gPSBUKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMobWVkaWFuLCBtZWFuLCBzZCwgbWluLCBtYXgpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFF1ZXN0aW9ucyAxLTIzCgojIyAxLiBXaGVyZSBkbyB5b3UgdXN1YWxseSBzbGVlcCBhdCBuaWdodD8gKGBzbGVwX29yZG4wMWApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjAxID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDEpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjAxKSksCiAgICAgICAgIHNsZXBfb3JkbjAxID0gZmFjdG9yKHNsZXBfb3JkbjAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJvd24gYmVkcm9vbSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWRyb29tIHNoYXJlZCB3aXRoIG90aGVycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tb24gcm9vbSAobGl2aW5nIHBsdXMgc2xlZXBpbmcpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcmNoL291dHNpZGUiLCAibm90IGluIGhvbWUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyaWFibGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wMSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDEsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDEsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxLiBXaGVyZSBkbyB5b3UgdXN1YWxseSBzbGVlcCBhdCBuaWdodD8gKGBzbGVwX29yZG4wMWApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKCiMjIDIuIFdoYXQgZG8geW91IHVzdWFsbHkgc2xlZXAgb24gYXQgbmlnaHQ/IChgc2xlcF9vcmRuMDJgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIG11dGF0ZShzbGVwX29yZG4wMiA9IGNhc2Vfd2hlbihncmVwbCgiLCIsIHNsZXBfb3JkbjAyKSB+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFzLmNoYXJhY3RlcihzbGVwX29yZG4wMikpLAogICAgICAgICBzbGVwX29yZG4wMiA9IGZhY3RvcihzbGVwX29yZG4wMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYmVkIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvZmEsIGRpdmFuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdCwgZ3JvdW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbW1vY2siLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wMikgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDIsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDIsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyLiBXaGF0IGRvIHlvdSB1c3VhbGx5IHNsZWVwIG9uIGF0IG5pZ2h0PyAoYHNsZXBfb3JkbjAyYCkiLCAKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAzLiBEb2VzIGFueW9uZSBlbHNlIHNsZWVwIGluIHRoZSBzYW1lIGJlZCAob3IgbWF0LCBoYW1tb2NrLCBldGMuKSB3aXRoIHlvdT8gKGBzbGVwX29yZG4wM2ApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjAzID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDMpIH4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMDMpKSwKICAgICAgICAgc2xlcF9vcmRuMDMgPSBmYWN0b3Ioc2xlcF9vcmRuMDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInllcyIsICJubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiKSkpICU+JQogIGNvdW50KHNsZXBfY3RyeSwgc2xlcF9vcmRuMDMpICU+JQogIGNvbXBsZXRlKHNsZXBfb3JkbjAzLCBuZXN0aW5nKHNsZXBfY3RyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfb3JkbjAzLCB5ID0gcHJvcCwgZmlsbCA9IHNsZXBfY3RyeSkpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHNsZXBfY3RyeSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMy4gRG9lcyBhbnlvbmUgZWxzZSBzbGVlcCBpbiB0aGUgc2FtZSBiZWQgKG9yIG1hdCwgaGFtbW9jaywgZXRjLikgd2l0aCB5b3U/XG4oYHNsZXBfb3JkbjAzYCkiLCAKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgoKIyMgNC4gSWYgeWVzLCB3aG8gc2xlZXBzIHdpdGggeW91IGluIHRoZSBiZWQ/IFBsZWFzZSBjaXJjbGUgdGhlIHBlcnNvbihzKSBmcm9tIHRoZSBsaXN0IChgc2xlcF9vcmRuMDRgKQoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjUsIGluY2x1ZGUgPSBUfQpkICU+JQogIG11dGF0ZShzbGVwX29yZG4wNCA9IGNhc2Vfd2hlbihncmVwbCgiLCIsIHNsZXBfb3JkbjA0KSB+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjA0KSksCiAgICAgICAgIHNsZXBfb3JkbjA0ID0gZmFjdG9yKHNsZXBfb3JkbjA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJub2JvZHkiLCAic3BvdXNlIiwgInNpc3RlciIsICJicm90aGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF1Z2h0ZXIiLCAic29uIiwgIm1vdGhlciIsICJmYXRoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFuZHBhcmVudCIsICJncmFuZGNoaWxkIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm90aGVyIHJlbGF0aXZlIiwgIm5vbi1yZWxhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiKSkpICU+JQogIGNvdW50KHNsZXBfY3RyeSwgc2xlcF9vcmRuMDQpICU+JQogIGNvbXBsZXRlKHNsZXBfb3JkbjA0LCBuZXN0aW5nKHNsZXBfY3RyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfb3JkbjA0LCB5ID0gcHJvcCwgZmlsbCA9IHNsZXBfY3RyeSkpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHNsZXBfY3RyeSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiNC4gSWYgeWVzLCB3aG8gc2xlZXBzIHdpdGggeW91IGluIHRoZSBiZWQ/IFBsZWFzZSBjaXJjbGUgdGhlIHBlcnNvbihzKSBmcm9tIHRoZSBsaXN0IChgc2xlcF9vcmRuMDRgKSIsIAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIDUuIEJlc2lkZXMgYW55b25lIHdobyBzaGFyZXMgdGhlIGJlZCB3aXRoIHlvdSwgZG9lcyBzb21lb25lIGVsc2Ugc2xlZXAgaW4gdGhlIHNhbWUgcm9vbSB3aXRoIHlvdT8gKGBzbGVwX29yZG4wNWApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjA1ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDUpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjA1KSksCiAgICAgICAgIHNsZXBfb3JkbjA1ID0gZmFjdG9yKHNsZXBfb3JkbjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJubyIsICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wNSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDUsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDUsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICI1LiBCZXNpZGVzIGFueW9uZSB3aG8gc2hhcmVzIHRoZSBiZWQgd2l0aCB5b3UsIGRvZXMgc29tZW9uZSBlbHNlIHNsZWVwIGluIHRoZSBzYW1lXG5yb29tIHdpdGggeW91PyAoYHNsZXBfb3JkbjA1YCkiLCAKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgoKIyMgNi4gSWYgeWVzLCB3aG8gZWxzZSBzbGVlcHMgaW4gdGhlIHNhbWUgcm9vbSB3aXRoIHlvdT8gUGxlYXNlIGNpcmNsZSB0aGUgcGVyc29uKHMpIGZyb20gdGhlIGxpc3QgKGBzbGVwX29yZG4wNmApCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNSwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjA2ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDYpIH4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMDYpKSwKICAgICAgICAgc2xlcF9vcmRuMDYgPSBmYWN0b3Ioc2xlcF9vcmRuMDYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm5vYm9keSIsICJzcG91c2UiLCAic2lzdGVyIiwgImJyb3RoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXVnaHRlciIsICJzb24iLCAibW90aGVyIiwgImZhdGhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdyYW5kcGFyZW50IiwgImdyYW5kY2hpbGQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3RoZXIgcmVsYXRpdmUiLCAibm9uLXJlbGF0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wNikgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDYsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDYsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICI2LiBJZiB5ZXMsIHdobyBlbHNlIHNsZWVwcyBpbiB0aGUgc2FtZSByb29tIHdpdGggeW91PyBQbGVhc2UgY2lyY2xlIHRoZSBwZXJzb24ocykgZnJvbSB0aGUgbGlzdCAoYHNsZXBfb3JkbjA2YCkiLCAKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyA3LiBXaGF0IGRvZXMgeW91ciBmYW1pbHkgdXNlIHRvIHNlZSBhdCBuaWdodD8gKGBzbGVwX29yZG4wN2ApCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNSwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjA3ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDcpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjA3KSksCiAgICAgICAgIHNsZXBfb3JkbjA3ID0gZmFjdG9yKHNsZXBfb3JkbjA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJub3RoaW5nLCBqdXN0IHRoZSBtb29uIGFuZCBzdGFycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpZ2h0IGZyb20gdGhlIGNvb2tpbmcgZmlyZSBvciBoZWFydGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5kbGVzIG9yIHN0cmF3IHRvcmNoZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvaWwgb3Iga2Vyb3NlbmUgbGFtcCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXR0ZXJ5LWRyaXZlbiBsYW1wIG9yIGZsYXNobGlnaHQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlY3RyaWMgbGlnaHQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wNykgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDcsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDcsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICI3LiBXaGF0IGRvZXMgeW91ciBmYW1pbHkgdXNlIHRvIHNlZSBhdCBuaWdodD8gKGBzbGVwX29yZG4wN2ApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKCiMjIDguIERvIHlvdSB1c3VhbGx5IHRha2UgbmFwcz8gKGBzbGVwX29yZG4wOGApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjA4ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDgpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjA4KSksCiAgICAgICAgIHNsZXBfb3JkbjA4ID0gZmFjdG9yKHNsZXBfb3JkbjA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJubyIsICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wOCkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDgsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDgsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICI4LiBEbyB5b3UgdXN1YWxseSB0YWtlIG5hcHM/IChgc2xlcF9vcmRuMDhgKSIsIAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIDkuIElmIHNvLCBob3cgb2Z0ZW4gZG8geW91IHJlc3Qgb3IgbmFwPyAoYHNsZXBfb3JkbjA5YCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMDkgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4wOSkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMDkpKSwKICAgICAgICAgc2xlcF9vcmRuMDkgPSBmYWN0b3Ioc2xlcF9vcmRuMDksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk5BIChuZXZlcikiLCAicmFyZWx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29tZXRpbWVzICgxLTIgdGltZXMgYSB3ZWVrKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzdWFsbHkgYnV0IG5vdCBldmVyeWRheSAoMy02IHRpbWVzIGEgd2VlaykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVyeSBkYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjA5KSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4wOSwgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4wOSwgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjkuIElmIHNvLCBob3cgb2Z0ZW4gZG8geW91IHJlc3Qgb3IgbmFwPyAoYHNsZXBfb3JkbjA5YCkiLCAKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfb3JkbjA5KSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMDkgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4wOSwgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjA5ID0gYXMubnVtZXJpYyhzbGVwX29yZG4wOSkpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNsZXBfb3JkbjA5IikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiOS4gSWYgc28sIGhvdyBvZnRlbiBkbyB5b3UgcmVzdCBvciBuYXA/IChgc2xlcF9vcmRuMDlgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgMTAuIFdoZW4gZG8geW91IHR5cGljYWxseSBmYWxsIGFzbGVlcCBldmVyeSBuaWdodCBhbmQgd2FrZSB1cCBldmVyeSBuaWdodD8gKGBzbGVwX29yZG4xMGApCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9jdHJ5LCBzbGVwX3N1YmosIHNsZXBfZGF0ZXRpbWVzbGVlcCwgc2xlcF9kYXRldGltZXdha2UpICU+JQogIG11dGF0ZV9hdCh2YXJzKHNsZXBfZGF0ZXRpbWVzbGVlcCwgc2xlcF9kYXRldGltZXdha2UpLAogICAgICAgICAgICBmdW5zKGFzLmNoYXJhY3RlcikpICU+JQogIGdhdGhlcihzbGVlcHdha2UsIHRpbWUsIC1jKHNsZXBfY3RyeSwgc2xlcF9zdWJqKSkgJT4lCiAgbXV0YXRlKHRpbWUgPSBwYXJzZV9kYXRldGltZSh0aW1lKSwKICAgICAgICAgc2xlZXB3YWtlID0gZmFjdG9yKHNsZWVwd2FrZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInNsZXBfZGF0ZXRpbWVzbGVlcCIsICJzbGVwX2RhdGV0aW1ld2FrZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiZmFsbCBhc2xlZXAiLCAid2FrZSB1cCIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gdGltZSwgZmlsbCA9IHNsZXBfY3RyeSwgY29sb3IgPSBzbGVlcHdha2UpKSArCiAgZmFjZXRfd3JhcCh+IHNsZXBfY3RyeSwgbmNvbCA9IDMpICsKICBnZW9tX2RlbnNpdHkocG9zaXRpb24gPSAiaWRlbnRpdHkiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDAuOCkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHBhc3RlKHRvZGF5KCkgKyAxLCAiMTI6MDAgQU0iKSAlPiUgCiAgICAgICAgICAgICAgIGFzX2RhdGV0aW1lKGZvcm1hdCA9ICIlWS0lbS0lZCAlSTolTSAlcCIpLCAKICAgICAgICAgICAgIGNvbG9yID0gImRhcmtibHVlIiwgbHR5ID0gMikgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHBhc3RlKHRvZGF5KCkgKyAxLCAiMDg6MDAgQU0iKSAlPiUgCiAgICAgICAgICAgICAgIGFzX2RhdGV0aW1lKGZvcm1hdCA9ICIlWS0lbS0lZCAlSTolTSAlcCIpLCAKICAgICAgICAgICAgIGNvbG9yID0gImRhcmtyZWQiLCBsdHkgPSAyKSArCiAgIyBhbm5vdGF0ZSgidGV4dCIsCiAgIyAgICAgICAgICB4ID0gcGFzdGUodG9kYXkoKSArIDEsICIxOjAwIEFNIikgJT4lCiAgIyAgICAgICAgICAgIGFzX2RhdGV0aW1lKGZvcm1hdCA9ICIlWS0lbS0lZCAlSTolTSAlcCIpLAogICMgICAgICAgICAgeSA9IDAuMDAwMTUsIGxhYmVsID0gIuKGkCBtaWRuaWdodCIsIGhqdXN0ID0gMCkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJkYXJrYmx1ZSIsICJkYXJrcmVkIiksIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeF9kYXRldGltZShkYXRlX2JyZWFrcyA9ICI2IGhvdXJzIiwgZGF0ZV9taW5vcl9icmVha3MgPSAgIjIgaG91cnMiLCAKICAgICAgICAgICAgICAgICAgIGRhdGVfbGFiZWxzID0gIiVJOiVtICVwIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnModGl0bGUgPSAiMTAuIFdoZW4gZG8geW91IHR5cGljYWxseSBmYWxsIGFzbGVlcCBldmVyeSBuaWdodCBhbmQgd2FrZSB1cCBldmVyeSBuaWdodD8gKGBzbGVwX29yZG4xMGApIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJOT1RFOiBMb3RzIG9mIG1pc3NpbmcgZGF0YSBoZXJlIVxuRG90dGVkIGxpbmVzIGluZGljYXRlIDEyOjAwIEFNIChtaWRuaWdodCkgYW5kIDg6MDBBTTsgYmx1ZSBvdXRsaW5lIGluZGljYXRlcyB0aW1lIHRvIGZhbGwgYXNsZWVwLCBhbmQgcmVkIGluZGljYXRlcyB0aW1lIHRvIHdha2UgdXAiLAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiRGVuc2l0eSAofnByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzKSIsIAogICAgICAgY29sb3IgPSAiU2xlZXAgdnMuIHdha2UiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBpbmNsdWRlID0gVH0KZCAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2R1cmF0aW9uX251bSwgZmlsbCA9IHNsZXBfY3RyeSkpICsKICBmYWNldF93cmFwKH4gc2xlcF9jdHJ5LCBuY29sID0gMykgKwogIGdlb21fZGVuc2l0eShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGFscGhhID0gMC41LCBzaXplID0gMC44KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gOCwgbHR5ID0gMikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnModGl0bGUgPSAiTGVuZ3RoIG9mIHNsZWVwIChkZXJpdmVkIGZyb20gYHNsZXBfb3JkbjEwYCkiLCAKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IExvdHMgb2YgbWlzc2luZyBkYXRhIGhlcmUhXG5Eb3R0ZWQgbGluZSBpbmRpY2F0ZXMgOCBob3VycyIsCiAgICAgICB4ID0gIkxlbmd0aCBvZiBzbGVlcCAoaG91cnMpIiwgeSA9ICJEZW5zaXR5ICh+cHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDEsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX2R1cmF0aW9uX251bSkgJT4lCiAgZmlsdGVyKCFpcy5uYShzbGVwX2R1cmF0aW9uX251bSkpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfY3RyeSwgeSA9IHNsZXBfZHVyYXRpb25fbnVtLCBjb2xvciA9IHNsZXBfY3RyeSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSA4LCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2xlcF9kdXJhdGlvbl9udW0iKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyh0cmFucyA9ICJsb2cxcCIsIGJyZWFrcyA9IHNlcSgwLCAxMDAsIDQpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIkxlbmd0aCBvZiBzbGVlcCAoZGVyaXZlZCBmcm9tIGBzbGVwX29yZG4xMGApIiwKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IExvdHMgb2YgbWlzc2luZyBkYXRhIGhlcmUhXG5QbG90dGVkIGFmdGVyIGFwcGx5aW5nIGxvZyB0cmFuc2Zvcm1hdGlvbiB0byBoaWdobGlnaHQgZGlmZmVyZW5jZXMgYmV0d2VlbiBzaXRlc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscztcbkRvdHRlZCBsaW5lIGluZGljYXRlcyA4IGhvdXJzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiTGVuZ3RoIG9mIHNsZWVwIChob3VycykiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIDExLiBEb2VzIHRoYXQgdmFyeSBhIGxvdCBmcm9tIG5pZ2h0IHRvIG5pZ2h0PyAoYHNsZXBfb3JkbjExYCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMTEgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4xMSkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMTEpKSwKICAgICAgICAgc2xlcF9vcmRuMTEgPSBmYWN0b3Ioc2xlcF9vcmRuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMTo1LCAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4xMSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMTEsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMTEsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxMS4gRG9lcyB0aGF0IHZhcnkgYSBsb3QgZnJvbSBuaWdodCB0byBuaWdodD8gRm9yIGV4YW1wbGUsIGRvIHlvdSByZWd1bGFybHkgc2xlZXAgZnJvbSBvbmVcbnRpbWUgKG1heWJlIDEwIHBtKSB0byBhbm90aGVyIHRpbWUgKG1heWJlIDYgYW0pIGVhY2ggbmlnaHQsIG9yIHNvbWV0aW1lcyBkbyB5b3Ugc2xlZXBcbmF0IDEwLCBvdGhlciBuaWdodHMgbWlkbmlnaHQsIHNvbWUgZGF5cyB5b3UgZ2V0IHVwIGF0IDIgYW0sIHNvbWV0aW1lcyBhbmQgNSBhbSxcbnNvbWV0aW1lcyA3IGFtLCBhdCB2ZXJ5IGRpZmZlcmVudCB0aW1lcz8gKGBzbGVwX29yZG4xMWApIiwKICAgICAgIHN1YnRpdGxlID0gIjE6IE5vIHZhcmlhdGlvbiwgNTogVmVyeSB2ZXJ5IHZhcmllZCIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xMSkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjExICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMTEsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4xMSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTEpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4xMSIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjExLiBEb2VzIHRoYXQgdmFyeSBhIGxvdCBmcm9tIG5pZ2h0IHRvIG5pZ2h0PyBGb3IgZXhhbXBsZSwgZG8geW91IHJlZ3VsYXJseSBzbGVlcCBmcm9tIG9uZVxudGltZSAobWF5YmUgMTAgcG0pIHRvIGFub3RoZXIgdGltZSAobWF5YmUgNiBhbSkgZWFjaCBuaWdodCwgb3Igc29tZXRpbWVzIGRvIHlvdSBzbGVlcFxuYXQgMTAsIG90aGVyIG5pZ2h0cyBtaWRuaWdodCwgc29tZSBkYXlzIHlvdSBnZXQgdXAgYXQgMiBhbSwgc29tZXRpbWVzIGFuZCA1IGFtLFxuc29tZXRpbWVzIDcgYW0sIGF0IHZlcnkgZGlmZmVyZW50IHRpbWVzPyAoYHNsZXBfb3JkbjExYCkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlICgxOiBObyB2YXJpYXRpb24sIDU6IFZlcnkgdmVyeSB2YXJpZWQpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAxMmEuIFJBIGp1ZGdtZW50IGZvciBob3VycyBzbGVwdCAoYHNsZXBfb3JkbjEyYWAsIGRlcml2ZWQgZnJvbSBgc2xlcF9vcmRuMTJgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xMmEpICU+JQogIGZpbHRlcihzbGVwX29yZG4xMmEgIT0gIi4iKSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMTJhIDw9IDIwKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4xMmEsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDgsIGx0eSA9IDIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHdpZHRoID0gMC4yNSwgaGVpZ2h0ID0gMC4yNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc2xlcF9vcmRuMTJhID0gYXMubnVtZXJpYyhzbGVwX29yZG4xMmEpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4xMmEiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogICMgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxMmEuIFJBIGp1ZGdtZW50IGZvciBob3VycyBzbGVwdCAoYHNsZXBfb3JkbjEyYWAsIGRlcml2ZWQgZnJvbSBgc2xlcF9vcmRuMTJgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJOT1RFOiBFeGNsdWRlZCBvbmUgb3V0bGllciAoMSBwYXJ0aWNpcGFudCBpbiBWVCB3aG8gd2FzIGp1ZGdlZCB0byBzbGVlcCA+IDIwIGhvdXJzO1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFsczsgZG90dGVkIGxpbmUgaW5kaWNhdGVzIDggaG91cnMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJOdW1iZXIgb2YgaG91cnMgc2xlcHQgKFJBIGp1ZGdtZW50KSIpCmBgYAoKCiMjIDEzLiBXaGF0IGRvIHlvdSB0aGluayBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcm9sZSBvZiBzbGVlcCBmb3IgeW91PyAoYHNsZXBfb3JkbjEzYCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX2N0cnksIHNsZXBfc3Viaiwgc2xlcF9vcmRuMTFfd29ybGRvZnNwaXJpdHMsCiAgICAgICAgICAgc2xlcF9vcmRuMTNfZGVlcHNlbGYsIHNsZXBfb3JkbjEzX21pbmRvZmYsIHNsZXBfb3JkbjEzX3JlcGxlbmlzaCkgJT4lCiAgZ2F0aGVyKHJvbGUsIHJlc3BvbnNlLCAtYyhzbGVwX2N0cnksIHNsZXBfc3ViaikpICU+JQogIG11dGF0ZShyb2xlID0gcmVjb2RlX2ZhY3Rvcihyb2xlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xlcF9vcmRuMTNfcmVwbGVuaXNoIiA9ICJyZXBsZW5pc2ggZW5lcmd5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsZXBfb3JkbjEzX21pbmRvZmYiID0gInNodXQgeW91ciBtaW5kIG9mZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGVwX29yZG4xM19kZWVwc2VsZiIgPSAiZ2FpbiBhY2Nlc3MgdG8geW91ciBkZWVwZXN0IHNlbGYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xlcF9vcmRuMTFfd29ybGRvZnNwaXJpdHMiID0gImNvbm5lY3Qgd2l0aCBhIHdvcmxkIG9mIHNwaXJpdHMiKSwKICAgICAgICAgcmVzcG9uc2UgPSBjYXNlX3doZW4oaXMubmEocmVzcG9uc2UpIH4gIm5vdCBzZWxlY3RlZCIsIFRSVUUgfiByZXNwb25zZSksCiAgICAgICAgIHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLCBsZXZlbHMgPSBjKCJub3Qgc2VsZWN0ZWQiLCAieWVzIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByb2xlLCBmaWxsID0gc2xlcF9jdHJ5LCBhbHBoYSA9IHJlc3BvbnNlKSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiY291bnQiLCBwb3NpdGlvbiA9ICJmaWxsIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXMgPSBjKDAuMSwgMSksIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxMy4gV2hhdCBkbyB5b3UgdGhpbmsgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHJvbGUgb2Ygc2xlZXAgZm9yIHlvdT8gKGBzbGVwX29yZG4xM2ApIiwgCiAgICAgICB4ID0gIlJvbGUiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIHNlbGVjdGluZyAneWVzJyIpCmBgYAoKCiMjIDE0LiBEbyB5b3UgbG9vayBmb3J3YXJkIHRvIGRyZWFtaW5nPyAoYHNsZXBfb3JkbjE0YCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMTQgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4xNCkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMTQpKSwKICAgICAgICAgc2xlcF9vcmRuMTQgPSBmYWN0b3Ioc2xlcF9vcmRuMTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm5vIiwgImEgbGl0dGxlIiwgImEgbG90IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4xNCkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMTQsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMTQsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxNC4gRG8geW91IGxvb2sgZm9yd2FyZCB0byBkcmVhbWluZz8gKGBzbGVwX29yZG4xNGApIiwKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfb3JkbjE0KSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMTQgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4xNCwgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjE0ID0gYXMubnVtZXJpYyhzbGVwX29yZG4xNCkpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNsZXBfb3JkbjE0IikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMTQuIERvIHlvdSBsb29rIGZvcndhcmQgdG8gZHJlYW1pbmc/IChgc2xlcF9vcmRuMTRgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIDE1LiBBcmUgZHJlYW1zIGFuIGltcG9ydGFudCBzb3VyY2Ugb2Ygc3Bpcml0dWFsIGluc2lnaHQgZm9yIHlvdT8gKGBzbGVwX29yZG4xNWApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjE1ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMTUpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjE1KSksCiAgICAgICAgIHNsZXBfb3JkbjE1ID0gZmFjdG9yKHNsZXBfb3JkbjE1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAic29tZXRpbWVzIiwgIm9mdGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4xNSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMTUsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMTUsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxNS4gQXJlIGRyZWFtcyBhbiBpbXBvcnRhbnQgc291cmNlIG9mIHNwaXJpdHVhbCBpbnNpZ2h0IGZvciB5b3U/IChgc2xlcF9vcmRuMTVgKSIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xNSkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjE1ICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMTUsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4xNSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTUpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4xNSIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE1LiBBcmUgZHJlYW1zIGFuIGltcG9ydGFudCBzb3VyY2Ugb2Ygc3Bpcml0dWFsIGluc2lnaHQgZm9yIHlvdT8iLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAxNi4gRG8geW91IHJlZ2FyZCBzbGVlcCBhcyBhIGRvb3J3YXkgaW50byBhbm90aGVyIHdheSBvZiBiZWluZz8gKGBzbGVwX29yZG4xNmApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjE2ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMTYpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjE2KSksCiAgICAgICAgIHNsZXBfb3JkbjE2ID0gZmFjdG9yKHNsZXBfb3JkbjE2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJubyIsICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4xNikgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMTYsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMTYsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxNi4gRG8geW91IHJlZ2FyZCBzbGVlcCBhcyBhIGRvb3J3YXkgaW50byBhbm90aGVyIHdheSBvZiBiZWluZz8gKGBzbGVwX29yZG4xNmApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgMTcuIERvIHNwZWNpYWwgc3Bpcml0dWFsIHRoaW5ncyBoYXBwZW4gZHVyaW5nIHRoZSBuaWdodCBmb3IgeW91PyAoYHNsZXBfb3JkbjE3YCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMTcgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4xNykgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMTcpKSwKICAgICAgICAgc2xlcF9vcmRuMTcgPSBmYWN0b3Ioc2xlcF9vcmRuMTcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm5ldmVyIiwgInJhcmVseSIsICJzb21ldGltZXMiLCAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjE3KSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4xNywgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4xNywgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE3LiBEbyBzcGVjaWFsIHNwaXJpdHVhbCB0aGluZ3MgaGFwcGVuIGR1cmluZyB0aGUgbmlnaHQgZm9yIHlvdT8gKGBzbGVwX29yZG4xN2ApIiwKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfb3JkbjE3KSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMTcgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4xNywgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjE3ID0gYXMubnVtZXJpYyhzbGVwX29yZG4xNykpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNsZXBfb3JkbjE3IikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMTcuIERvIHNwZWNpYWwgc3Bpcml0dWFsIHRoaW5ncyBoYXBwZW4gZHVyaW5nIHRoZSBuaWdodCBmb3IgeW91PyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIDE4LiBEbyB5b3Ugd2FrZSB1cCB0byBwcmF5IGluIHRoZSBtaWRkbGUgb2YgdGhlIG5pZ2h0PyAoYHNsZXBfb3JkbjE4YCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMTggPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4xOCkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMTgpKSwKICAgICAgICAgc2xlcF9vcmRuMTggPSBmYWN0b3Ioc2xlcF9vcmRuMTgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm5ldmVyIiwgInJhcmVseSIsICJzb21ldGltZXMiLCAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjE4KSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4xOCwgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4xOCwgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE4LiBEbyB5b3Ugd2FrZSB1cCB0byBwcmF5IGluIHRoZSBtaWRkbGUgb2YgdGhlIG5pZ2h0PyAoYHNsZXBfb3JkbjE4YCkiLAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX3N1YmosIHNsZXBfY3RyeSwgc2xlcF9vcmRuMTgpICU+JQogIGZpbHRlcihzbGVwX29yZG4xOCAhPSAiLiIpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfY3RyeSwgeSA9IHNsZXBfb3JkbjE4LCBjb2xvciA9IHNsZXBfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHdpZHRoID0gMC4yNSwgaGVpZ2h0ID0gMC4yNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc2xlcF9vcmRuMTggPSBhcy5udW1lcmljKHNsZXBfb3JkbjE4KSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2xlcF9vcmRuMTgiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogICMgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxOC4gRG8geW91IHdha2UgdXAgdG8gcHJheSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBuaWdodD8iLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAxOWEuIFJBIGp1ZGdtZW50IGZvciB0aW1lIHNwZW50IGluIHByYXllciAoYHNsZXBfb3JkbjE5YWAsIGRlcml2ZWQgZnJvbSBgc2xlcF9vcmRuMTlgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xOWEpICU+JQogIGZpbHRlcihzbGVwX29yZG4xOWEgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4xOWEsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDYwLCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjE5YSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTlhKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2xlcF9vcmRuMTlhIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAibG9nMXAiLCBicmVha3MgPSBzZXEoMCwgMTAwMCwgNjApKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE5YS4gUkEganVkZ21lbnQgZm9yIHRpbWUgc3BlbnQgaW4gcHJheWVyIChgc2xlcF9vcmRuMTlhYCwgZGVyaXZlZCBmcm9tIGBzbGVwX29yZG4xOWApIiwKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IFBsb3R0ZWQgYWZ0ZXIgYXBwbHlpbmcgbG9nIHRyYW5zZm9ybWF0aW9uIHRvIGhpZ2hsaWdodCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHNpdGVzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzOyBkb3R0ZWQgbGluZXMgaW5kaWNhdGVzIDEgaG91ciIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIk51bWJlciBvZiBtaW51dGVzIHNwZW50IGluIHByYXllciAoUkEganVkZ21lbnQpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAyMC4gSWYgeW91IGRvLCBkbyB5b3UgZ28gYmFjayB0byBzbGVlcD8gKGBzbGVwX29yZG4yMGApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjIwID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMjApIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjIwKSksCiAgICAgICAgIHNsZXBfb3JkbjIwID0gZmFjdG9yKHNsZXBfb3JkbjIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAic29tZXRpbWVzIiwgIm9mdGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4yMCkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMjAsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMjAsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyMC4gSWYgeW91IGRvLCBkbyB5b3UgZ28gYmFjayB0byBzbGVlcD8gKGBzbGVwX29yZG4yMGApIiwKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfb3JkbjIwKSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMjAgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4yMCwgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjIwID0gYXMubnVtZXJpYyhzbGVwX29yZG4yMCkpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNsZXBfb3JkbjIwIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMjAuIElmIHlvdSBkbywgZG8geW91IGdvIGJhY2sgdG8gc2xlZXA/IChgc2xlcF9vcmRuMjBgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIDIxLiBEbyB5b3UgaW50ZW50aW9uYWxseSBzbGVlcCBpbiBhbnkgc3BlY2lmaWMgcG9zaXRpb25zIHRoYXQgaGF2ZSBzcGlyaXR1YWwgb3IgaGVhbHRoIGNvbnNlcXVlbmNlcz8gKGBzbGVwX29yZG4yMWApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjIxID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMjEpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjIxKSksCiAgICAgICAgIHNsZXBfb3JkbjIxID0gZmFjdG9yKHNsZXBfb3JkbjIxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAic29tZXRpbWVzIiwgIm9mdGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4yMSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMjEsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMjEsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyMS4gRG8geW91IGludGVudGlvbmFsbHkgc2xlZXAgaW4gYW55IHNwZWNpZmljIHBvc2l0aW9ucyB0aGF0IGhhdmUgc3Bpcml0dWFsIG9yXG5oZWFsdGggY29uc2VxdWVuY2VzPyAoYHNsZXBfb3JkbjIxYCkiLAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX3N1YmosIHNsZXBfY3RyeSwgc2xlcF9vcmRuMjEpICU+JQogIGZpbHRlcihzbGVwX29yZG4yMSAhPSAiLiIpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfY3RyeSwgeSA9IHNsZXBfb3JkbjIxLCBjb2xvciA9IHNsZXBfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHdpZHRoID0gMC4yNSwgaGVpZ2h0ID0gMC4yNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUoc2xlcF9vcmRuMjEgPSBhcy5udW1lcmljKHNsZXBfb3JkbjIxKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2xlcF9vcmRuMjEiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogICMgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyMS4gRG8geW91IGludGVudGlvbmFsbHkgc2xlZXAgaW4gYW55IHNwZWNpZmljIHBvc2l0aW9ucyB0aGF0IGhhdmUgc3Bpcml0dWFsIG9yXG5oZWFsdGggY29uc2VxdWVuY2VzPyAoYHNsZXBfb3JkbjIxYCkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAyMi4gRG8geW91IGludGVyYWN0IHdpdGggR29kIG9yIHdpdGggc3Bpcml0cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBuaWdodD8gKGBzbGVwX29yZG4yMmApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjIyID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMjIpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjIyKSksCiAgICAgICAgIHNsZXBfb3JkbjIyID0gZmFjdG9yKHNsZXBfb3JkbjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAic29tZXRpbWVzIiwgIm9mdGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4yMikgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMjIsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMjIsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyMi4gRG8geW91IGludGVyYWN0IHdpdGggR29kIG9yIHdpdGggc3Bpcml0cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBuaWdodD8gKGBzbGVwX29yZG4yMmApIiwKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfb3JkbjIyKSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMjIgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4yMiwgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjIyID0gYXMubnVtZXJpYyhzbGVwX29yZG4yMikpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNsZXBfb3JkbjIyIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMjIuIERvIHlvdSBpbnRlcmFjdCB3aXRoIEdvZCBvciB3aXRoIHNwaXJpdHMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbmlnaHQ/IChgc2xlcF9vcmRuMjJgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIDIzLiAgV2hhdCB3YWtlcyB5b3UgdXAgbW9zdCBhdCBuaWdodD8gKGBzbGVwX29yZG4yM2ApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9jdHJ5LCBzbGVwX3N1YmosIHNsZXBfb3JkbjIzX1BoeXNpb2xvZ2ljYWwsIAogICAgICAgICAgIHNsZXBfb3JkbjIzX1BzeWNob2xvZ2ljYWwsIHNsZXBfb3JkbjIzX0RyZWFtcywKICAgICAgICAgICBzbGVwX29yZG4yM19Tb3VuZCwgc2xlcF9vcmRuMjNfc3VwZXJuYXR1cmFscHJheWVyKSAlPiUKICBnYXRoZXIocm9sZSwgcmVzcG9uc2UsIC1jKHNsZXBfY3RyeSwgc2xlcF9zdWJqKSkgJT4lCiAgbXV0YXRlKHJvbGUgPSByZWNvZGVfZmFjdG9yKHJvbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGVwX29yZG4yM19QaHlzaW9sb2dpY2FsIiA9ICJwaHlzaW9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsZXBfb3JkbjIzX1BzeWNob2xvZ2ljYWwiID0gInBzeWNob2xvZ2ljYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xlcF9vcmRuMjNfRHJlYW1zIiA9ICJkcmVhbXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xlcF9vcmRuMjNfU291bmQiID0gInNvdW5kcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGVwX29yZG4yM19zdXBlcm5hdHVyYWxwcmF5ZXIiID0gInN1cGVybmF0dXJhbCIpLAogICAgICAgICByZXNwb25zZSA9IGNhc2Vfd2hlbihpcy5uYShyZXNwb25zZSkgfiAibm90IHNlbGVjdGVkIiwgVFJVRSB+IHJlc3BvbnNlKSwKICAgICAgICAgcmVzcG9uc2UgPSBmYWN0b3IocmVzcG9uc2UsIGxldmVscyA9IGMoIm5vdCBzZWxlY3RlZCIsICJ5ZXMiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJvbGUsIGZpbGwgPSBzbGVwX2N0cnksIGFscGhhID0gcmVzcG9uc2UpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIsIHBvc2l0aW9uID0gImZpbGwiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcyA9IGMoMC4xLCAxKSwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjIzLiBXaGF0IGRvIHlvdSB0aGluayBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcm9sZSBvZiBzbGVlcCBmb3IgeW91PyAoYHNsZXBfb3JkbjIzYCkiLCAKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IE5pa2tpJ3MgY29kZXM7XG4tIFBoeXNpb2xvZ2ljYWw6IGUuZy4sIGJvZHkgbmVlZHMsIHNlbnNvcnkgZXhwZXJpZW5jZXMsIG5vIHJlYXNvblxuLSBQc3ljaG9sb2dpY2FsOiBlLmcuLCBlbW90aW9ucywgcGxhbnMsIHRob3VnaHRzXG4tIERyZWFtczogZS5nLiwgZHJlYW1zLCBuaWdodG1hcmVzLCBmZWVsaW5nIG9mIGZhbGxpbmcpXG4tIFNvdW5kczogZS5nLiwgYWxhcm0sIHBlb3BsZSwgYW5pbWFsc1xuLSBTdXBlcm5hdHVyYWw6IGUuZy4sIGdvZCwgc3Bpcml0LCBwcmF5ZXJcbk5PVEU6IG1hbnkgYW5zd2VycyBub3QgdHJhbnNsYXRlZCEiLAogICAgICAgeCA9ICJSb2xlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyBzZWxlY3RpbmcgJ3llcyciKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgIkVkZ2UiIHN1cnZleQoKIyMgVG90YWwgc2NvcmUgKGBzbGVwX2VkZ2VfdG90YWxgKQoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGluY2x1ZGUgPSBUfQpkICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfZWRnZV90b3RhbCwgZmlsbCA9IHNsZXBfY3RyeSkpICsKICBmYWNldF93cmFwKH4gc2xlcF9jdHJ5LCBuY29sID0gMykgKwogIGdlb21fZGVuc2l0eShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGFscGhhID0gMC41LCBzaXplID0gMC44KSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgbGFicyh0aXRsZSA9ICJFZGdlIHRvdGFsIHNjb3JlIChgc2xlcF9lZGdlX3RvdGFsYCkiLCAKICAgICAgIHggPSAiRWRnZSB0b3RhbCBzY29yZSAocmFuZ2U6IDAtNjApIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKH5wcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX3N1YmosIHNsZXBfY3RyeSwgc2xlcF9lZGdlX3RvdGFsKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNsZXBfZWRnZV90b3RhbCkpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfY3RyeSwgeSA9IHNsZXBfZWRnZV90b3RhbCwgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2xlcF9lZGdlX3RvdGFsIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDYwLCAxMCkpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiRWRnZSB0b3RhbCBzY29yZSAoYHNsZXBfZWRnZV90b3RhbGApIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJFZGdlIHRvdGFsIHNjb3JlIChyYW5nZTogMC02MCkiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEluZGl2aWR1YWwgcXVlc3Rpb25zCgpUaGUgImVkZ2UiIHN1cnZleSBjb25zaXN0ZWQgb2YgMjAgcXVlc3Rpb25zLCBsYWJlbGVkIGFzIGZvbGxvd3MgKG9yZGVyIG1heSBoYXZlIHZhcmllZCBhY3Jvc3MgdmVyc2lvbnM/KToKCi0gYHNsZXBfZWRnZTAxYDogMTEuIEkndmUgZmVsdCBhbiBldmlsIHByZXNlbmNlIGluIHRoZSByb29tLCBidXQgY291bGQgbm90IHNlZSwgaGVhciwgdG91Y2ggb3Igc21lbGwgYW55b25lIHRoZXJlLgotIGBzbGVwX2VkZ2UwMmA6IDEyLiBJJ3ZlIGhlYXJkIHNvbWVvbmUgY2FsbGluZyBteSBuYW1lCi0gYHNsZXBfZWRnZTAzYDogMTMuIEkndmUgc2VlbiBhIGJsdXJyeSBodW1hbiBmaWd1cmUgaW4gdGhlIHJvb20uCi0gYHNsZXBfZWRnZTA0YDogMTQuSSd2ZSBoYWQgdGhlIHNlbnNlIG9mIGFuIGludmlzaWJsZSBwcmVzZW5jZSB3YXRjaGluZyBtZS4KLSBgc2xlcF9lZGdlMDVgOiAxNS4gSSd2ZSBoZWFyZCB0aGUgdm9pY2Ugb2YgYSBwZXJzb24gSSBjb3VsZCBub3QgaWRlbnRpZnkuCi0gYHNsZXBfZWRnZTA2YDogMTYuIEkndmUgaGVhcmQgaHVtYW4gc3BlZWNoIHdoaWNoIHNwb2tlIGluIGEgZ2FyYmxlZCwgdW5jbGVhciB3YXkuCi0gYHNsZXBfZWRnZTA3YDogMTcuIEkndmUgc2VlbiB0aGUgaW1hZ2Ugb2YgYSBmYWNlLgotIGBzbGVwX2VkZ2UwOGA6IDE4LiBJJ3ZlIGhlYXJkIHRoZSB2b2ljZSBvZiBzb21lb25lIGZhbWlsaWFyIHRvIG1lLgotIGBzbGVwX2VkZ2UwOWA6IDE5LiBJJ3ZlIHNlZSB0aGluZ3Mgb3IgZmlndXJlcyBmbG9hdGluZyBpbiBteSByb29tLgotIGBzbGVwX2VkZ2UxMGA6IDIwLiBJJ3ZlIGZlbHQgdGhlIHByZXNlbmNlIG9mIGFuIGludHJ1ZGVyIGluIG15IGJlZHJvb20sIHRob3VnaCBJIGRpZCBub3QgYWN0dWFsbHkgc2VlLCBoZWFyLCB0b3VjaCBvciBzbWVsbCBhbnlvbmUKLSBgc2xlcF9lZGdlMTFgOiAxLiBJJ3ZlIGNsZWFybHkgc2VlbiBwZW9wbGUgaW4gbXkgcm9vbQotIGBzbGVwX2VkZ2UxMmA6IDIuIEkndmUgaGVhcmQgbm9uLXNwZWVjaCBzb3VuZCwgc3VjaCBhcyBsYXVnaHRlciwgbXVzaWMgb3Igb3RoZXIgbm9pc2VzCi0gYHNsZXBfZWRnZTEzYDogMy4gSSd2ZSBzZWVuIHRoaW5ncyBpbiBteSByb29tIG90aGVyIHRoYW4gcGVvcGxlCi0gYHNsZXBfZWRnZTE0YDogNC4gSSd2ZSBoYWQgdGhlIGZlZWxpbmcgb2YgYSBwcmVzZW5jZSBpbiB0aGUgcm9vbSB3aGljaCBJIGZlbHQgd2FzIGF3YXJlIG9mIG1lIHRvbywgYnV0IEkgY291bGQgbm90IGFjdHVhbGx5IHNlZSwgaGVhciwgdG91Y2ggb3Igc21lbGwgdGhlbQotIGBzbGVwX2VkZ2UxNWA6IDUuIEkndmUgaGVhcmQgR29kIChvciBhIHNwaXJpdCkgc3BlYWsKLSBgc2xlcF9lZGdlMTZgOiA2LiBJJ3ZlIGhlYXJkIEdvZCAob3IgYSBzcGlyaXQpIHNpbmdpbmcgdG8gbWUuCi0gYHNsZXBfZWRnZTE3YDogNy4gSSd2ZSBzZWVuIGFuIGFuZ2VsIChvciBhIHNwaXJpdCkKLSBgc2xlcF9lZGdlMThgOiA4LiBJJ3ZlIHNlZW4gYSBnaG9zdAotIGBzbGVwX2VkZ2UxOWA6IDkuIEkndmUgZmVsdCB0aGUgcHJlc2VuY2Ugb2YgR29kIChvciBhIHNwaXJpdCkKLSBgc2xlcF9lZGdlMjBgOiAxMC4gSSBoYXZlIHdva2VuIHVwIGFuZCBiZWVuIHVuYWJsZSB0byBtb3ZlLgoKYGBge3J9CmVkZ2Vfa2V5IDwtIHJlYWRfZXhjZWwoIi4vZWRnZV9rZXkueGxzeCIpCmBgYAoKYGBge3J9CmVkZ2VfcGxvdCA8LSBkICU+JQogIHNlbGVjdChzbGVwX3N1YmosIHNsZXBfY3RyeSwgY29udGFpbnMoImVkZ2UiKSwgLWNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIGNvbnRhaW5zKCJlZGdlIikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygibmV2ZXIiLCAicmFyZWx5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9jY2FzaW9uYWxseSIsICJmcmVxdWVudGx5IikpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gcmVzcG9uc2UsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4wNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShzbGVwX2N0cnksIHF1ZXN0aW9uKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAicmVzcG9uc2UiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDAuNSkgKwogIGdlb21fdGV4dChkYXRhID0gZWRnZV9rZXksIAogICAgICAgICAgICBhZXMoeCA9IE5VTEwsIHkgPSBOVUxMLCBjb2xvciA9IE5VTEwsCiAgICAgICAgICAgICAgICBsYWJlbCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIHdpZHRoID0gMjkpKSwKICAgICAgICAgICAgeCA9IDAuNzUsIHkgPSA1LjUsIGNvbG9yID0gImJsYWNrIiwgCiAgICAgICAgICAgIGhqdXN0ID0gMCwgdmp1c3QgPSAxLCBzaXplID0gMi41LCBsaW5laGVpZ2h0ID0gMC44KSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfZGlzY3JldGUoZXhwYW5kID0gZXhwYW5kX3NjYWxlKGFkZCA9IGMoMC42LCAxLjc1KSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyB0byAnZWRnZScgcXVlc3Rpb25zIChgc2xlcF9lZGdlMDFgLWBzbGVwX2VkZ2UyMGApIiwKICAgICAgIHN1YnRpdGxlID0gIkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJSZXNwb25zZSIpCmBgYAoKTm90ZTogdGhpcyB2ZXJzaW9uIG9mIHRoZSBwbG90IGlzIHByb2JhYmx5IGJldHRlciBmb3Igc2xpZGVzLCBidXQgSSd2ZSByZXBsb3R0ZWQgaXQgb24gdGhlIGZvbGxvd2luZyBwYWdlIGZvciBlYXN5IG9mIHJlYWRpbmcgaW4gdGhpcyBQREYuCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgaW5jbHVkZSA9IFR9CiMgYmV0dGVyIGZvciBzbGlkZXMKZWRnZV9wbG90ICsgZmFjZXRfd3JhcCh+IHF1ZXN0aW9uLCBuY29sID0gNykKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CmBgYHtyLCBmaWcud2lkdGggPSAzLjUsIGZpZy5hc3AgPSAyLjYyNSwgaW5jbHVkZSA9IFR9CiMgb3B0aW1pemVkIGZvciBQREYgaW4gcG9ydHJhaXQKZWRnZV9wbG90ICsgZmFjZXRfd3JhcCh+IHF1ZXN0aW9uLCBuY29sID0gMykKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgc2VsZWN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBjb250YWlucygiZWRnZSIpLCAtY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgY29udGFpbnMoImVkZ2UiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2NjYXNpb25hbGx5IiwgImZyZXF1ZW50bHkiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlc3BvbnNlLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSwgcm93cyA9IHZhcnMocXVlc3Rpb24pKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgcmVzcG9uc2VzIHRvICdlZGdlJyBxdWVzdGlvbnMgKGBzbGVwX2VkZ2UwMWAtYHNsZXBfZWRnZTIwYCkiLAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCgo=